package main

import (
	"bufio"
	"fmt"
	"imooc.com/ccmouse/learngo/functional/fib"
	"os"
)

// 1.确保调用在函数结束时发生
// 2.参数在defer语句时计算
// 3.defer列表为后进先出
// 使用场景：  1.Open/Close    2.Lock/Unlock    3.PrintHeader/PrintFooter
func tryDefer() {
	defer fmt.Println(1)
	defer fmt.Println(2)
	fmt.Println(3)
}

func writeFile(filename string) {
	// 创建文件,并CLOSE
	file, err := os.OpenFile(filename, os.O_EXCL|os.O_CREATE, 0666)

	// 自定义错误
	//err = errors.New("this is a custom error")

	if pathError, ok := err.(*os.PathError); !ok {
		panic(err)
	} else {
		fmt.Printf("%s, %s, %s\n", pathError.Op, pathError.Path, pathError.Err)
	}
	return
	defer file.Close()

	// 通过缓存写文件操作
	writer := bufio.NewWriter(file)
	defer writer.Flush()

	f := fib.Fibonacci()
	for i := 0; i < 20; i++ {
		fmt.Fprintln(writer, f())
	}
}

func main() {
	writeFile("fib.txt")
}
